package main

import (
	"fmt"
	"sort"
)

func set(v int, i int, nlist []int) {
	nlist[i] = v
}

// 数组是值类型，相当于结构体
// slice是引用类型,相当于指针
func main() {
	arr := [5]int{24, 12, 42, 124, 56}

	arr2 := arr
	arr2[0] = -1
	fmt.Printf("arr1 addr:%p,arr2 addr %p\n", &arr, &arr2)
	fmt.Println(arr[0], arr2[0])

	//当数组作为函数参数是自动转换为对应的切片
	set(15, 0, arr2[:])
	fmt.Println(arr2[0])

	slice := arr[:]
	slice[0] = -1
	fmt.Println(arr[0], slice[0])

	// slice是引用类型,相当于指针
	s1 := []int{0, 1, 2, 3, 4}
	s2 := s1
	s2[0] = -1
	fmt.Printf("s1 addr:%p,s2 addr %p\n", s1, s2)
	fmt.Println(s1[0], s2[0])

	fmt.Println(arr, slice)
	fmt.Println(arr[1:3], slice[1:3]) //数组切片，切片切片
	sort.Ints(arr[:])
	fmt.Println(arr, slice)
	//sort.IntSlice将数组接口化，使用接口中的函数进行排序
	sort.Sort(sort.Reverse(sort.IntSlice(slice)))
	fmt.Println(arr, slice)

	var value bool
	value, r, a, b, c := true, 1, 2, 3, 4
	fmt.Println(value, r, a, b, c)

	n, err := fmt.Scan(&r)
	if err != nil {
		fmt.Printf("输入错误！%d %#v", n, err)
	}

}
